// main.js
const express = require('express');
const mysql = require('mysql');
const cors = require('cors');

const app = express();
const port = 3000;
app.use(express.json())
app.use(cors()); // 允许跨域请求

// 创建 MySQL 数据库连接
const db = mysql.createConnection({
    host: 'localhost',
    user: 'root',
    password: 'm4a1123',
    database: 'my_database1'
});

// 连接到 MySQL 数据库
db.connect((err) => {
    if (err) {
        console.error('连接到数据库失败: ', err);
        return;
    }
    console.log('成功连接到 MySQL 数据库!');
});

// 定义一个接口来获取表头信息
app.get('/api/table-header', (req, res) => {
    const headTableAtts = [
        { columnLabel: '姓名', columnName: 'name' },
        { columnLabel: '年龄', columnName: 'age' },
        { columnLabel: '性别', columnName: 'gender' },
        { columnLabel: '学校', columnName: 'school' },
        { columnLabel: '学历', columnName: 'qualification' },
    ];

    res.json(headTableAtts);
});

// 定义一个接口来获取数据列表
app.get('/api/data-list', (req, res) => {
    const sqlQuery = 'SELECT * FROM students'; // SQL 查询语句，读取 students 表中的所有数据

    db.query(sqlQuery, (err, results) => {
        if (err) {
            console.error('查询数据库时出错: ', err);
            res.status(500).json({ error: '数据库查询失败' });
            return;
        }
        res.json(results); // 返回查询结果
    });
});

/**
 * 新增接口
 */
app.post('/api/add',(req,res) => {
    const {name, age, gender, school, qualification} = req.body;
    //检查请求体里有没有必要的参数
    if(!name || !age || !gender || !school || !qualification)
    {
        return res.status(400).json({error: '缺少必要参数'});
    }
    //插入数据的sql语句
    const sqlInsert = 'INSERT INTO students (name, age,gender,school,qualification) VALUES (?,?,?,?,?)';
    const values = [name,age,gender,school,qualification];
    db.query(sqlInsert,values,(err,result) => {
        if(err){
            console.log('插入数据失败',err);
            return res.status(500).json({error: '插入数据失败'});
        }
        res.json({message: '插入数据成功',id: result.insertId});
    });
    })

/** ========================= 删除接口  ========================= **/
app.delete('/api/delete', (req, res) => {
    const ids = req.body.ids;
    // 打印整个 req 对象（注意：会打印很多信息）
    // console.log('请求对象:', req);
    // 打印请求体（通常用于 POST/PUT/DELETE 请求的参数）
    console.log('请求体:', req.body);
    console.log('接收到的 ID 列表:', ids);
    // 检查id是否为有效的数值
    if (!ids || !Array.isArray(ids) || ids.length === 0) {
        return res.status(400).json({ code: "400", msg: "无效的请求，缺少 ID 列表" });
    }

    const deleteQuery = 'DELETE FROM students WHERE id = ?';

    db.query(deleteQuery, [ids], (error, results) => {
        if (error) {
            res.status(500).json({ code: "500", msg: "数据库删除失败", error });
            return;
        }

        if (results.affectedRows > 0) {
            res.status(200).json({ code: "200", msg: "用户删除成功" });
        } else {
            res.status(404).json({ code: "404", msg: "未找到用户，删除失败" });
        }
    });
});

/** ========================= 更新接口  ========================= **/
app.put('/api/update',(req,res) => {
    // 获取更新数据
    const {id,name,age,gender,school,qualification} = req.body;
    //检查请求体里有没有必要的参数
    if(!id || !name || !age || !gender || !school || !qualification)
    {
        return res.status(400).json({
            code: 400,
            msg: '缺少必要参数',
        });
    }
    //更新数据的sql语句
    const sqlUpdate = `update students set name = ?,age = ?,gender = ?,
    school = ?, qualification = ? where id = ?`;
    //执行
    db.query(sqlUpdate,[name,age,gender,school,qualification,id],(err,result) => {
     if(err){
         return res.status(500).json({
             code: 500,
             msg: '更新数据失败',
             error: error,
         });
     }
     if(result.affectedRows > 0){
         return res.json({
             code: 200,
             msg: '更新数据成功',
         });
    }else {
        return res.status(404).json({
            code: 404,
            msg: '未找到用户，更新失败',
        });
    }});
})

// 启动服务器
app.listen(port, () => {
    console.log(`服务器正在运行在 http://localhost:${port}`);
});
